package com.exercise.ThreadSynchronization.problem;

public class UnsafeCounterDemo {
    public static void main(String[] args) throws InterruptedException {
        Counter counter = new Counter();
        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 10000; i++) {
                counter.increment();
            }
        });
        Thread thread2 = new Thread(() -> {
            for (int i = 0; i < 10000; i++) {
                counter.increment();
            }
        });
        thread1.start();
        thread2.start();

        //主线程等待t1、t2执行完成
        thread1.join();
        thread2.join();

        // 结果可能小于20000
        //在两个线程并发执行时，如果它们在几乎相同的时间执行 increment()，可能会出现以下情况
        //	线程A 读取了 count = 100
        //	线程B 也读取了 count = 100
        //	两个线程都加了1，得到 101
        //	个线程都把 101 写回 count
        //最终结果是：count 只增加了 1，而不是 2。
        System.out.println("Count: " + counter.getCount());
    }

}


class Counter{
    private int count = 0;

    //没有同步
    public void increment(){
        count++;
    }

    public int getCount(){
        return count;
    }
}